1 module hip.hipaudio.backend.webaudio.source;
2 
3 version(WebAssembly):
4 
5 extern(C) size_t WebAudioSourceCreate();
6 extern(C) void WebAudioSourceStop(size_t src);
7 extern(C) void WebAudioSourceSetData(size_t src, size_t buffer);
8 extern(C) void WebAudioSourceSetPlaying(size_t src, bool playing);
9 extern(C) void WebAudioSourceSetLooping(size_t src, bool shouldLoop);
10 extern(C) void WebAudioSourceSetPitch(size_t src, float pitch);
11 extern(C) void WebAudioSourceSetVolume(size_t src, float volume);
12 extern(C) void WebAudioSourceSetPlaybackRate(size_t src, float rate);
13 
14 import hip.hipaudio.backend.webaudio.player;
15 import hip.hipaudio.backend.webaudio.clip;
16 import hip.hipaudio.audiosource;
17 import hip.error.handler;
18 
19 
20 class HipWebAudioSource : HipAudioSource
21 {
22     protected bool isClipDirty = true;
23     protected size_t webSrc = 0;
24 
25     this(HipWebAudioPlayer player){webSrc = WebAudioSourceCreate();}
26     alias clip = HipAudioSource.clip;
27 
28 
29     override IHipAudioClip clip(IHipAudioClip newClip)
30     {
31         if(newClip != clip)
32             isClipDirty = true;
33 
34         WebAudioSourceSetData(webSrc, getBufferFromAPI(newClip).webaudio);
35         super.clip(newClip);
36         return newClip;
37     }
38 
39     alias loop = HipAudioSource.loop;
40     override bool loop(bool value)
41     {
42         bool ret = super.loop(value);
43         WebAudioSourceSetLooping(webSrc, value);
44         return ret;
45     }
46 
47         
48     override bool play()
49     {
50         WebAudioSourceSetPlaying(webSrc, true);
51         return true;
52     }
53     override bool stop()
54     {
55         WebAudioSourceStop(webSrc);
56         return true;
57     }
58     override bool pause()
59     {
60         WebAudioSourceSetPlaying(webSrc, false);
61         return true;
62     }
63     override bool play_streamed() => false;
64     
65 
66     ~this(){webSrc = 0;}
67 }